# RVC Control SW — 조교 재현 가이드

본 디렉토리는 객체지향개발방법론 **TeamPractice#5**의 산출물입니다.
RVC(Robot Vacuum Cleaner) Control SW를 **Claude Code(AI)** 를 일관되게 활용하여 처음부터 개발했습니다.

> **재증류·재설계 정책**: `reference/`의 PDF, `objective.md`, 이전 학기 코드(`CICD-Team7-main/`)는 시스템의 의도를 *이해*하기 위한 1차 자료로만 사용했습니다. **요구사항(FR/NFR/UC) 자체도 Claude가 통독·이해한 후 새 ID 체계로 재증류**했으며, 원본의 문장·다이어그램·시그니처는 산출물에 그대로 옮기지 않았습니다. 추적성 표로 원본 ID와 새 ID 매핑을 입증합니다. 아키텍처·클래스 분해·인터페이스는 객체지향 설계 원칙에 따라 처음부터 도출했습니다.

> 팀원이 AI 자동화 환경을 사용하는 방법은 [USAGE.md](USAGE.md)를 참고하세요.

## 1. 산출물 위치

| 산출물 | 위치 | 생성 단계 |
|---|---|---|
| 시스템 개요 (Claude 재증류) | `docs/specs/system-overview.md` | `/extract-specs` |
| 재증류된 요구사항 (FR/NFR + 추적성 표) | `docs/specs/requirements.md` | `/extract-specs` |
| 재증류된 유스케이스 | `docs/specs/use-cases.md` | `/extract-specs` |
| SRS (Claude 재구성) | `docs/srs/SRS.md` | `/srs` |
| SDD (Claude 최적화 설계) | `docs/sdd/SDD.md` | `/sdd` |
| Code (Claude 구현) | `include/`, `src/`, `main.cpp` | `/code` |
| UT (단위 테스트) | `test/unit/*.cpp` | `/ut` |
| Simulator | `test/simulator/*.{h,cpp}` | `/simulator` |
| ST (시스템 테스트) | `test/system/*.cpp` | `/st` |
| SA (정적 분석 리포트) | `docs/sa/{cppcheck.txt,clang-tidy.txt,summary.md}` | `/sa` |
| 빌드 설정 | `CMakeLists.txt` | `/code` |
| Claude 작동 기록 (발표용) | `log/YYYY-MM-DD_HHMM_<command>.md` | 매 슬래시 커맨드 |

## 2. 환경 요구사항

- OS: **Ubuntu 22.04** (또는 Windows + WSL Ubuntu)
- 패키지:
  ```bash
  sudo apt update && sudo apt install -y \
      build-essential cmake ninja-build libgtest-dev cppcheck clang-tidy lcov
  ```

## 3. 한 줄 빌드·테스트 (조교용)

### Linux/WSL
```bash
cmake -S . -B build && cmake --build build -j && ctest --test-dir build --output-on-failure
```

### Windows PowerShell (WSL 경유)
```powershell
wsl bash -lc "cd '/mnt/c/Users/윤성진/OneDrive/바탕 화면/Konkuk/3-1/객체지향개발방법론/과제/TeamPractice#5/dev' && cmake -S . -B build && cmake --build build -j && ctest --test-dir build --output-on-failure"
```

빌드 산출물:
- `build/oop` — 메인 실행파일
- `build/oop_test` — 단위 테스트 실행파일
- `build/oop_system_test` — 시스템 테스트 실행파일

## 4. 정적 분석 재실행

```bash
cppcheck --enable=all --std=c++17 --suppress=missingIncludeSystem -I include src 2> docs/sa/cppcheck.txt
clang-tidy -p build src/*.cpp -- -std=c++17 -Iinclude > docs/sa/clang-tidy.txt
```

## 5. AI 자동화 워크플로우 (재현)

Claude Code에서 다음 슬래시 커맨드를 순서대로 호출하면 동일한 산출물이 재생성됩니다:

```
/extract-specs
/srs
/sdd
/code
/ut
/simulator
/st
/sa
/package
```

각 커맨드는 `log/` 폴더에 실행 기록을 자동으로 남깁니다.
사용된 프롬프트·결정·생성 파일·검증 명령이 모두 기록되어 있어, **발표 자료**로 그대로 활용할 수 있습니다.

특히 `/extract-specs` 로그에는 **원본 요구사항을 어떻게 통합·재진술했는지**, `/sdd`·`/code` 로그에는 **PDF·이전 코드의 설계와 다르게 도출한 근거**가 명시되어 있습니다.

자세한 커맨드 정의는 `.claude/commands/<command>.md`를 참고하세요.

## 6. 디렉토리 트리

```
dev/
├── CLAUDE.md                 # AI 운영 규약
├── README.md                 # 본 파일
├── USAGE.md                  # 팀원용 가이드
├── CMakeLists.txt
├── .claude/commands/         # 9개 슬래시 커맨드
├── docs/{specs,srs,sdd,sa}/  # 문서 산출물 (Claude 최적화 결과)
├── include/, src/            # C++ 소스 (Claude 구현)
├── test/{unit,system,simulator}/
├── log/                      # Claude 작동 기록 (발표용)
└── reference/                # 원본 명세 PDF + objective.md + 이전 학기 코드 (수정 금지, /extract-specs 단계에서만 통독)
```
